﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Tarea3_Virginia_Opazo
{
    static class Consultas
    {

        #region Trabajadores
        /// <summary>
        /// Obtiene lista completa de trabajadores y sus atributos
        /// </summary>
        /// <returns></returns>
        static public string obtenerListaTrabajadores()
        {
            string consulta = @"SELECT t.IdTrabajador, 
                                t.NombreTrabajador, 
                                t.ApellidoTrabajador,
                                CONCAT( t.NombreTrabajador,  ' ', t.ApellidoTrabajador ) AS NombreCompletoTrabajador, 
                                t.IdEspecializacion_Trabajador, 
                                e.NombreEspecializacion
                                FROM Trabajador AS t
                                LEFT JOIN Especializacion AS e ON t.IdEspecializacion_Trabajador = e.IdEspecializacion";
            return consulta;
        }

        static public string InsertarTrabajador(string nombre,string apellido,string idEspecializacion)
        {
            if (idEspecializacion == null)
            {
                return "INSERT INTO trabajador(NombreTrabajador,ApellidoTrabajador) VALUES ('"+nombre+"','"+apellido+"')";
            }
            return "INSERT INTO trabajador(IdEspecializacion_Trabajador,NombreTrabajador,ApellidoTrabajador) VALUES ('"+idEspecializacion+"','"+ nombre + "','" + apellido + "')";
        }

        static public string BorrarTrabajador(int idTrabajador)
        {
            string consulta = "DELETE FROM Trabajador WHERE IdTrabajador="+idTrabajador.ToString();
            return consulta;
        }

        #endregion

        #region Especialidades
        static public string InsertarEspecialidad(string nuevaEspecialidad)
        {
            string consulta = "Insert INTO especializacion(NombreEspecializacion) VALUES ('"+nuevaEspecialidad+"')";
            return consulta;
        }

        static public string SeleccionarEspecialidades()
        {
            string consulta = "SELECT * FROM especializacion";
            return consulta;
        }

        static public string BorrarEspecialidad(int id)
        {
            string consulta = "DELETE FROM especializacion WHERE IdEspecializacion="+id.ToString();
            return consulta;
        }
        #endregion

        #region Proyectos
        static public string InsertarProyecto(string idTrabajadorJefe,string nombreProyecto)
        {
            string consulta = "INSERT INTO proyecto(IdTrabajador_Jefe,NombreProyecto) VALUES ('"+idTrabajadorJefe+"','"+nombreProyecto+"')";
            return consulta;
        }

        static public string obtenerListaProyectos()
        {
            string consulta = @"SELECT  p.IdProyecto, 
                                        p.IdTrabajador_Jefe, 
                                        p.NombreProyecto, 
                                        CONCAT( t.NombreTrabajador,  ' ', t.ApellidoTrabajador ) AS NombreCompletoTrabajador, 
                                        e.NombreEspecializacion
                                        FROM proyecto AS p
                                        LEFT JOIN trabajador AS t ON p.IdTrabajador_Jefe = t.IdTrabajador
                                        LEFT JOIN especializacion AS e ON t.IdEspecializacion_Trabajador = e.IdEspecializacion";
            return consulta;
        }

        static public string obtenerProyectosReducida()
        {
            string consulta = @"SELECT  p.IdProyecto, 
                                        p.NombreProyecto
                                        FROM proyecto AS p

        UNION
SELECT -1,'' FROM proyecto ORDER BY IdProyecto
";
            return consulta;
        }

        static public string BorrarProyecto(int idProyecto)
        {
            string consulta = "DELETE FROM Proyecto WHERE IdProyecto="+idProyecto.ToString();
            return consulta;
        }
        #endregion

        #region Varios
        static public string HorasAsignadasTrabajador()
        {
            string consulta = @"SELECT tp.IdTrabajador,
                                CONCAT(t.NombreTrabajador,' ',t.ApellidoTrabajador) AS NombreCompleto, 
                                SUM( tp.Horas ) AS HorasLibres
                                FROM trabajadores_proyecto AS tp
                                LEFT JOIN trabajador AS t
                                ON tp.IdTrabajador=t.IdTrabajador
                                GROUP BY IdTrabajador
                                ";
            return consulta;
        }

        static public string EsJefeDeProyecto(int trabajador)
        {
            string consulta = "SELECT IdProyecto FROM proyecto WHERE IdTrabajador_Jefe="+trabajador.ToString();
            return consulta;
        }

        static public string HorasXTrabajador()
        {
            string consulta = @"SELECT t.IdTrabajador, 
                                CONCAT( t.NombreTrabajador,  ' ', t.ApellidoTrabajador ) AS NombreCompleto, 
                                IFNULL( NombreEspecializacion,  ' ' ) AS NombreEspecializacion, 
                                44 - IFNULL( trabp.Horas, 0 ) AS Horas
                                FROM trabajador AS t
                                LEFT OUTER JOIN 
                                (
                                    SELECT tp.IdTrabajador, SUM( tp.Horas ) AS Horas
                                    FROM trabajadores_proyecto tp
                                    GROUP BY tp.IdTrabajador
                                ) AS trabp ON trabp.IdTrabajador = t.IdTrabajador
                                LEFT OUTER JOIN especializacion AS e ON t.IdEspecializacion_Trabajador = e.IdEspecializacion";
            return consulta;
        }

        static public string AgregarOrden(List<string> parametros)
        {
            string agregar = "";
            if (parametros.Count != 0)
            {
                agregar = " ORDER BY ";
                foreach (string parametro in parametros)
                {
                    agregar += parametro +",";
                }

                agregar = agregar.Substring(0, agregar.LastIndexOf(','));
            }
            return agregar;
        }

        static public string HorasProyecto(string idProyecto)
        {
            string consulta = @"SELECT tp.IdTrabajador, 
                                CONCAT( t.NombreTrabajador,  ' ', t.ApellidoTrabajador ) AS NombreCompleto, 
                                iFNULL( e.NombreEspecializacion,  '' )  AS NombreEspecializacion,
                                tp.Horas, 
                                ht.HorasTotales
                                FROM trabajadores_proyecto AS tp
                                LEFT OUTER JOIN trabajador AS t ON tp.IdTrabajador = t.IdTrabajador
                                LEFT OUTER JOIN especializacion AS e ON t.IdEspecializacion_Trabajador = e.IdEspecializacion
                                LEFT OUTER JOIN (
                                    SELECT trabp.IdTrabajador, SUM( trabp.Horas ) AS HorasTotales
                                    FROM trabajadores_proyecto AS trabp
                                    GROUP BY trabp.IdTrabajador
                                    ) AS ht ON tp.IdTrabajador = ht.IdTrabajador
                                WHERE tp.IdProyecto=" + idProyecto;
            return consulta;
        }

        static public string HorasProyecto(string idProyecto,List<int> idTrabajador)
        {
            string consulta = @"SELECT tp.IdTrabajador, 
                                CONCAT( t.NombreTrabajador,  ' ', t.ApellidoTrabajador ) AS NombreCompleto, 
                                IFNULL( e.NombreEspecializacion,  '' )  AS NombreEspecializacion,
                                tp.Horas, 
                                ht.HorasTotales
                                FROM trabajadores_proyecto AS tp
                                LEFT OUTER JOIN trabajador AS t ON tp.IdTrabajador = t.IdTrabajador
                                LEFT OUTER JOIN especializacion AS e ON t.IdEspecializacion_Trabajador = e.IdEspecializacion
                                LEFT OUTER JOIN (
                                    SELECT trabp.IdTrabajador, SUM( trabp.Horas ) AS HorasTotales
                                    FROM trabajadores_proyecto AS trabp
                                    GROUP BY trabp.IdTrabajador
                                    ) AS ht ON tp.IdTrabajador = ht.IdTrabajador
                                WHERE tp.IdProyecto=" + idProyecto;

            foreach (int id in idTrabajador)
            {

            }
            return consulta;
        }

        static public string ObtenerEmpleadosVinculados(string idProyecto)
        {
            string consulta = @"SELECT tp.IdTrabajador 
                                FROM trabajadores_proyecto AS tp
                                WHERE tp.IdProyecto=" + idProyecto;
            return consulta;
        }

        static public string InsertarTrabajadorProyectoHora(string idTrabajador,string idProyecto,string horas)
        {
            string consulta = "INSERT INTO trabajadores_proyecto(IdTrabajador,IdProyecto,Horas) VALUES ('"+idTrabajador+"','"+idProyecto+"','"+horas+"')";
            return consulta;
        }
        static public string ActualizarTrabajadorProyectoHora(string idTrabajador, string idProyecto, string horas)
        {
            string consulta = "UPDATE trabajadores_proyecto SET horas='"+horas+"' WHERE IdTrabajador='"+idTrabajador+"' AND IdProyecto='"+idProyecto+"'";
            return consulta;
        }
        static public string ExisteTrabajadorProyectoHora(string idTrabajador, string idProyecto)
        {
            string consulta = "SELECT * FROM trabajadores_proyecto WHERE IdTrabajador='" + idTrabajador + "' AND IdProyecto='" + idProyecto + "'";
            return consulta;
        }

        static public string BorrarTrabajadorProyectoHora(string idTrabajador, string idProyecto)
        {
            string consulta = "DELETE FROM trabajadores_proyecto WHERE IdTrabajador='" + idTrabajador + "' AND IdProyecto='" + idProyecto + "'";
            return consulta;
        }

        #endregion
    }
}
